/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
export var smallestDistancePair = function (nums, k) {
  // 排序
  nums.sort((a, b) => a - b)
  // 最大距离不可能超过尾数和头数的差值，从这个范围进行二分查找
  let left = 0,
    right = nums[nums.length - 1] - nums[0]
  while (left <= right) {
    const mid = (left + right) >> 1
    // 计算小于等于 mid 的数对的个数
    let count = 0
    // 双指针计算小于等于 mid 的数对
    for (let i = 0, j = 1; j < nums.length; j++) {
      while (nums[j] - nums[i] > mid) {
        i++
      }
      count += j - i
    }
    if (count < k) {
      left = mid + 1
    } else {
      right = mid - 1
    }
  }
  return left
}
